package controle.dados;

import static controle.dados.Constants.*;
import Matematica.XY;
import robocode.DadosRobos.RoboScaneado;


public class PosicaoJogador {	
	

	/**
	 * Valor de 0 a 15 como especificado no diagrama
	 */
	int valor;
	int posicaoRelativaX;
	int posicaoRelativaY;
	
	public PosicaoJogador(int xAbsoluto, int yAbsoluto)
	{
		instanciaValorAPartirValoresAbsolutos(xAbsoluto,yAbsoluto);
	}
	
	public PosicaoJogador(int valor){
		setValor(valor);
	}
	
	public PosicaoJogador(RoboScaneado roboScaneado)
	{
		instanciaValorAPartirValoresAbsolutos(roboScaneado.getX(),roboScaneado.getY());
	}
	
	public void instanciaValorAPartirValoresAbsolutos(double xAbsoluto, double yAbsoluto){
		
		//O 1.0 é só para o famigerado java passar para double
		double xRelativo = xAbsoluto/WIDTH*1.0;
		double yRelativo = xAbsoluto/HEIGHT*1.0;
		
		if(xRelativo <= 0.25)
		{
			posicaoRelativaX = 0;
		}
		else if(xRelativo > 0.25 && xRelativo <= 0.5)
		{
			posicaoRelativaX = 1;
		}
		else if(xRelativo > 0.5 && xRelativo <= 0.75){
			posicaoRelativaX = 2;
		}
		else if(xRelativo > 0.75){
			posicaoRelativaX = 3;
		}
		
		//agora para o y
		
		if(yRelativo <= 0.25)
		{
			posicaoRelativaY = 0;
		}
		else if(yRelativo > 0.25 && yRelativo <= 0.5)
		{
			posicaoRelativaY = 1;
		}
		else if(yRelativo > 0.5 && yRelativo <= 0.75){
			posicaoRelativaY = 2;
		}
		else if(yRelativo > 0.75){
			posicaoRelativaY = 3;
		}
		//fórmula para o valor da posição, bem simples
		valor = posicaoRelativaX*4+posicaoRelativaY;
	}
	
	public void atualizaPosicao(int novoX, int novoY){
		instanciaValorAPartirValoresAbsolutos(novoX,novoY);
	}
	
	public void setValor(int valor){
		this.valor = valor;
		this.posicaoRelativaX = valor/4;
		this.posicaoRelativaY = valor%4;
	}
	
	public int getValor(){
		return valor;
	}
	
	public XY getPosicaoAbsolutaAleatoria(){
		double xAbsoluto = posicaoRelativaX*WIDTH/4 + (WIDTH/4)*Math.random();
		double yAbsoluto = posicaoRelativaX*HEIGHT/4 + (HEIGHT/4)*Math.random();
		
		return new XY(xAbsoluto, yAbsoluto);
	}
	
	public int getPosicaoRelativaX() {
		return posicaoRelativaX;
	}

	public int getPosicaoRelativaY() {
		return posicaoRelativaY;
	}
}
